//登录和注册需要的user类
var  User = require('../models/user');
//需要引入一个加密的模块
var crypto = require('crypto');
//console.log(crypto);

// 一个权限的问题？
// 用户未登录的时候，是无法访问/post,/logout的
// 用户登录的时候，是无法访问/login,/reg的
// 如何完成权限问题？


module.exports = function(app){
//	 首页
    app.get('/',function(req,res){
        res.render('index',{
        	title:'主页',
        	user:req.session.user,
        	success:req.flash('success').toString(),
        	error:req.flash('error').toString()
        	})
    })
//  注册页面
     app.get('/reg',function(req,res){
     	res.render('reg',{
     		title:'注册',
     		user:req.session.user,
     		success:req.flash('success').toString(),
     		error:req.flash('error').toString()
     		})
    })
//   注册的行为
	  app.post('/reg',function(req,res){
//	  	1,收集用户的注册信息
//      2,将用户的注册信息传入到User类中,new实例化一个
//		3,调用User.save方法将数据存放到users集合中去
//		4,跳转到登录页面完成
//		5,可以给用户一个提示,
            var name = req.body.name;
            var password = req.body.password;
            var password_re = req.body['password-repeat'];
            var email = req.body.email;
            console.log(req.body);
            //补充，如果为填写的条件下，提示用户
            if(name == '' || password == '' || password_re == '' || email == ''){
            	   req.flash('error','请正确填写信息');
            	   return res.redirect('/reg');
            }
//           1,首先检查一下两次密码是否一致
          if(password_re != password){
          	 //先保存一下当前的错误信息 req.flash 存储一个error值：值：用户两次输入的密码不一样
          	req.flash('error','用户两次输入的密码不一样')
//        	redirect 跳转
          	return res.redirect('/reg');
          }
//     2,对密码进行加密处理  md5加密方式
		var md5 = crypto.createHash('md5');
		var password = md5.update(req.body.password).digest('hex');
//		console.log(password);
//       3,开始实例化User对象   将注册信息传入进去 此时得到一个新的user
		 var newUser = new User({
		 	name:name,
		 	password:password,
		 	email:email
		 });
//		 4,User.get的get 方法：检查用户名是否存在
		  User.get(newUser.name,function(err,user){
//		  	如果发生了错误,跳转回首页
               if(err){
               	req.flash('error',err);
               	return res.redirect('/');
               }
//             如果存在重复的用户名
               if(user){
               	req.flash('error','用户名已经存在');
               	return  res.redirect('/reg');
               }
//             正确的条件下 此时数据都在newUser中
			newUser.save(function(err,user){
				if(err){
					req.flash('error',err);
				}
//				用户信息存入session中
	         req.session.user = newUser;
//	         声明一个success变量:赋值为:注册成功
	         req.flash('success','注册成功');
	         res.redirect('/');
			})
		  })
	});
//	  登录
	   app.get('/login',function(req,res){
	   	res.render('login',{
	   		title:'登录',
			user:req.session.user,
			success:req.flash('success').toString(),
			error:req.flash('error').toString()
	   	})
	});
//	   登录行为
	   app.post('/login',function(req,res){
//	   		1,检查用户名有没有
//	   		2,检查下密码是否正确
//			4,存储到session中用户的登录信息
//	   		4,跳转到首页
			var md5 = crypto.createHash('md5');  //首先还是加密
			var password = md5.update(req.body.password).digest('hex');
			 User.get(req.body.name,function(err,user){
			 	if(!user){
//			 		用户不存在
			 		req.flash('error','用户名不存在！');
			 		return res.redirect('/login');
			 	}
//		检查输入的密码是否等于数据库中的密码
		if(user.password != password){
			req.flash('error','密码错误');
			return res.redirect('/login');
        }
			req.session.user = user;
			req.flash('success','登录成功！');
			res.redirect('/');
			 })
	});
//	 发表
	  app.get('/post',function(req,res){
	  	res.render('post',{title:'发表'})
	  });
//	  发表行为
	  app.post('/post',function(req,res){

	  });
//	  退出
	app.get('/logout',function(req,res){
//		清除session
//	1,清除session
//  2,给用户提示
//  3,跳转到首页
	req.session.user = null;
	req.flash('success','成功退出');
	res.redirect('/');
	})

}